<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>



<script>

  // arr.map()
  // arr.forEach()
  // arr.reduce()

  // arr.filter()
  // arr.some() // boolean
  // arr.every()// boolean
  let arr = [1, 2, 45, 23, 9]

  console.log(arr.reduce((sum, item, index) => {
    // console.log(item, index)
    // console.log(index)
    return sum + item
  }))

  /*console.log(arr.every((item) => {
    console.log(item)
    return item < 100
  }))*/

  /*console.log(arr.some((item) => {
    // console.log(item)
    return item < 0
  }))*/

  /*console.log(arr.filter((item) => {
    // console.log(item)
    return item > 10
  }))*/

  /*console.log(arr.forEach((item) => {
    // console.log(item)
    return item ** 2
  }))*/





  // for (let item of arr.entries()) {
    // console.log(item)
  // }

  // console.log(Object.fromEntries(arr.entries()))
  
  // console.log('==========')


  // let person = {
  //   name: '张三',
  //   sex: '男',
  //   age: 18,
  //   action() {
  //     alert('hi!')
  //   },
  //   a: {
  //     b: 1
  //   }
  // }

  // console.log(Object.keys(person))
  // console.log(Object.values(person))
  // console.log(Object.entries(person))


  // let obj1 = Object.assign({}, person)
  // let obj1 = {
  //   ...person
  // }
  // // let obj1 = person
  // console.log(obj1)
  // obj1.a.b = 10
  // obj1.name = 'zhangsan'
  // console.log(person)


  // console.log(Object.assign({}, person, {c: 1}, {d: 10}))

  // console.log({
  //   ...person,
  //   ...{c: 1},
  //   ...{d: 10}
  // })

  // console.log(Object.assign(person, {c: 1}, {d: 10}))
  // console.log(person)

  // let person1 = {
  //   '姓名': '李四',
  //   '性别': '男',
  //   '年龄': 18,
  //   action() {
  //     alert('hi! 123')
  //   }
  // }

  // console.log({
  //   ...person1,
  //   ...person,
  // }.action())

  // console.log({
  //   ...person,
  //   name: '李四',
  // })




  /*let arr = [1, 2, 45, 23, 'hello', 9]
  let name = 'zhangsan'
  let obj = {
    arr,
    name,
    method() {
      //
    },
    // [name]: name
    // name: name
  }
  console.log(obj)*/

  // console.log(arr.keys())
  // for (let key of arr.keys()) {
  // for (let key of arr.values()) {
  // for (let key of arr.entries()) {
  // for (let [index, key] of arr.entries()) {
  //   console.log(index, key)
  // }

  // console.log(new Array(10).fill(undefined))
  // console.log(arr)
  // arr.fill(['0', 123])
  // arr.map()
  // arr.reduce()
  // arr.filter()
  // arr.some()
  // arr.every()
  // let res = arr.find((item) => item > 10)
  // let res = arr.findIndex((item) => typeof(item) === 'string')
  // console.log(res)


  // let arr = [1, 2, 45, 23, 9]
  // arr.copyWithin(2, 4)
  // arr.copyWithin(2, 0, 2)
  // console.log(arr)

  // let eleArr = document.querySelectorAll('*')
  // console.log(eleArr)
  // console.log(Array.from(eleArr))

  // console.log(new Array(1, 20, 23))
  // console.log(new Array(23))
  // console.log(Array.of(23))
  // console.log(Array.of(23, 20))
  // console.log(new Array(10).fill(undefined))
  // console.log(Array.from({length: 10}))
  // console.log([].slice.call(eleArr))
  // console.log([...eleArr])
  // let arr = [1, 2, 45, 23, 9]
  // let arr1 = arr.concat()
  // let arr1 = [...arr]
  // let [...arr1] = arr
  // arr1.push('hahha')
  // console.log(arr1)
  // console.log(arr)

  // let arr = [1, 2, 45, 23, 9]
  // console.log([...arr, ...arr, ...arr])

  // console.log(document.querySelectorAll('*').push(123))
  // let arr = [...document.querySelectorAll('*')]
  // arr.push(123)
  // console.log(arr)
  // console.log([1, 2, 45, 23, 9])
  // console.log(23, ...[1, 2, 45, 23, 9])
  // console.log(1, 2, 45, 23, 9)

  // 谁调用方法谁就是this
  // function f() {
    // window.setTimeout(() => {
    //   console.log(this)
    // }, 3000)
    // window.setTimeout(function () {
    //   console.log(this)
    // }, 3000)
  // }
  // f()
  // console.log([10, 2, 23, 13, 7].sort((a, b) => a - b))
  // console.log([10, 2, 23, 13, 7].sort((a, b) => b - a))
  // console.log([1, 2, 3].map(item => item * item))
  // console.log([1, 2, 3].map(function (item) {
  //   // console.log(item * item)
  //   return item * item
  // }))
  // const f = (x, y) => {
  //   return {sum: x + y}
  // }
  // const f = (x, y) => ({sum: x + y})
  // console.log(f(100, 1))

  // const f = x => x
  // const f = (x, y) => x + y
  // const f = (x, y) => {
  //   return x + y
  // }
  // function f(x, y) {
  //   return x + y
  // }
  // console.log(f(100, 1))

  // const f1 = function (a, ...options) {
    // console.log(a)
    // console.log(options)
    // return options
  // }

  // const f = (a, ...options) => {
  //   return options
  // }
  // const f = (a, ...options) => options
  // console.log(f(1, 10, 22, 34, 'hhah'))

  // console.log(f1(1, 10, 22, 34, 'hhah'))

  // f(1, 10, 22, 34, 'hhah')

  // rest ...剩余参数
  /*function f(a, ...options) {
    console.log(a)
    console.log(options)
  }

  f(1, 10, 22, 34, 'hhah')*/

  // function foo({x = 1, y = 10} = {}) {
    // const {x, y} = option
    // {x = 1, y = 10}
    // console.log(x)
    // console.log(y)
  // }

  // foo({y: 9})
  // foo({x: 1})
  // foo()

  // 函数是特殊的对象
  
  // function Point(x = 0, y = 0) {
  //   // console.log(this)
  //   this.x = x
  //   this.y = y
  // }
  // let p = new Point(10)
  // console.log(p)

  // function sayHi(msg) {
  //   msg = msg || 'Hello'
  //   console.log(msg)
  // }
  // function sayHi(msg = 'Hello') {
  //   console.log(msg)
  // }
  // sayHi()
  // sayHi('Hi')
  // sayHi(false)
  // sayHi('false')

  // function sayHi(msg) {
  // function sayHi() {
  //   let msg
  //   console.log(msg)
  // }
  //
  // sayHi()









  /*
  * ECMAScript 标准
  * JavaScript 标准的一种实现
  * Bable 转语法 ES6 -> ES5
  * Polyfill 转api，转ES5不支持的api
  *
  * 解构赋值  ...剩余
  *
  *
  * */










</script>
</body>
</html>